From f3a1f2d30e5ad2e567b147264f1e93b2c8b1bcb3 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Mon, 19 Apr 2010 11:07:14 +0100 Subject: [PATCH] Simplify continue_hypercall_on_cpu() now that it runs in vcpu context. We do not need to take so much care over putting the original vcpu to sleep, as it will not be spinning on progress of the idle vcpu. Signed-off-by: Keir Fraser --- xen/common/domain.c | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/xen/common/domain.c b/xen/common/domain.c index f67445c77e..c1b32ab087 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -919,19 +919,8 @@ static void continue_hypercall_tasklet_handler(unsigned long _info) struct migrate_info *info = (struct migrate_info *)_info; struct vcpu *v = info->vcpu; - /* - * Wait for vcpu to be entirely descheduled. We re-schedule ourselves - * meanwhile to allow other work to be done (e.g., descheduling the vcpu!). - */ - BUG_ON(vcpu_runnable(v)); - if ( v->is_running ) - { - tasklet_schedule(&v->continue_hypercall_tasklet); - return; - } - - /* Once descheduled, we need to gain access to its register state. */ - sync_vcpu_execstate(v); + /* Wait for vcpu to sleep so that we can access its register state. */ + vcpu_sleep_sync(v); this_cpu(continue_info) = info; return_reg(v) = (info->cpu == smp_processor_id()) -- 2.30.2